package com.timebank.timecoin.mapper;

import com.timebank.timecoin.pojo.dto.TimeCoinTradeDTO;
import com.timebank.timecoin.pojo.entity.TimeCoinTrade;
import com.timebank.timecoin.pojo.vo.TimeCoinTradeVO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author shiliuyinzhen
 */
@Mapper
public interface TimeCoinTradeMapper {

    /**
     * 获取时间币支出交易列表
     * @param timeCoinTradeDTO@return
     */
    List<TimeCoinTradeVO> getPayTradeByUserId(TimeCoinTradeDTO timeCoinTradeDTO);

    /**
     * 获取时间币收入交易列表
     * @param timeCoinTradeDTO
     * @return
     */
    List<TimeCoinTradeVO> getGetTradeByUserId(TimeCoinTradeDTO timeCoinTradeDTO);

    /**
     * 获取时间币所有交易列表
     * @param timeCoinTradeDTO@return
     */
    List<TimeCoinTradeVO> getAllTradeByUserId(TimeCoinTradeDTO timeCoinTradeDTO);

    /**
     * 创建时间币交易
     * @param timeCoinTrade
     * @return
     */
    int createTrade(TimeCoinTrade timeCoinTrade);

    /**
     * 修改时间币交易
     * @param timeCoinTrade
     * @return
     */
    int updateTrade(TimeCoinTrade timeCoinTrade);

    /**
     * 根据id获取时间币交易信息
     * @param tradeId
     * @return
     */
    TimeCoinTrade getTradeById(Long tradeId);

    /**
     * 批量删除时间币交易
     * @param tradeIds
     * @return
     */
    int deleteTradeByIds(Long[] tradeIds);

    /**
     * 条件删除时间币交易
     * @param timeCoinTrade
     * @return
     */
    int deleteTrade(TimeCoinTrade timeCoinTrade);

    /**
     * 根据志愿服务Id获取未支付时间币交易
     * @param volunteerId
     * @return
     */
    List<TimeCoinTrade> getUnPaidTradeByVolunteerId(Long volunteerId);

    /**
     * 根据志愿服务Ids批量删除时间币交易
     * @param volunteerIds
     * @return
     */
    int deleteTradeByVolunteerIds(Long[] volunteerIds);

    /**
     * 根据用户Ids和志愿服务Id批量删除时间币交易
     * @param userIds
     * @return
     */
    int deleteTradeByUserIdsAndVolunteerId(@Param("userIds") Long[] userIds,@Param("volunteerId") Long volunteerId);

    /**
     * 条件查询时间币交易
     * @param timeCoinTrade
     * @return
     */
    List<TimeCoinTradeVO> getTradeByCondition(TimeCoinTrade timeCoinTrade);

    /**
     * 批量修改时间币交易
     * @param timeCoinTrade
     * @return
     */
    int batchUpdateTradeByVolunteerId(TimeCoinTrade timeCoinTrade);
}
